package com.admin.education.services.Interfaces;

import com.admin.education.common.exceptions.BadRequestException;
import com.admin.education.common.exceptions.ResourceNotFoundException;
import com.admin.education.dataTransferObject.PageRequest;
import com.admin.education.dataTransferObject.PageResponse;
import com.admin.education.dataTransferObject.ServicesExcuteResult;
import com.admin.education.dataTransferObject.question.Request.QueryQuestionRequest;
import com.admin.education.dataTransferObject.templates.Request.CreateTemplateRequest;
import com.admin.education.dataTransferObject.templates.Request.QueryTemplateRequest;
import com.admin.education.dataTransferObject.templates.Request.UpdateTemplateRequest;
import com.admin.education.dataTransferObject.templates.TemplatesTransfer;
import com.admin.education.dataTransferObject.userAnswerSheet.Request.CreateUserAnswersSheetRequest;
import com.admin.education.dataTransferObject.userAnswerSheet.Request.SubmitPaperRequest;
import com.admin.education.dataTransferObject.userAnswerSheet.UserAnswerSheetTransfer;
import org.mapstruct.ap.shaded.freemarker.template.TemplateTransformModel;

import javax.validation.Valid;
import javax.xml.ws.Service;
import java.util.List;

public interface ITemplateService {
    ServicesExcuteResult<PageResponse<TemplatesTransfer>> queryTemplates(@Valid PageRequest pageRequest);
    ServicesExcuteResult<TemplatesTransfer> queryTemplateById(long id) throws ResourceNotFoundException;
    ServicesExcuteResult<UserAnswerSheetTransfer> createUserAnswerSheet(long id, long userInformationId, long roleId, @Valid SubmitPaperRequest submitPaperRequest) throws ResourceNotFoundException;
    ServicesExcuteResult<List<UserAnswerSheetTransfer>> queryUserAnswerSheetByTemplateId(long id, long userInformationId) throws ResourceNotFoundException;
    ServicesExcuteResult createTemplate(@Valid CreateTemplateRequest createTemplateRequest) throws BadRequestException;
    ServicesExcuteResult updateTemplate(long templateId,@Valid UpdateTemplateRequest updateTemplateRequest) throws ResourceNotFoundException, BadRequestException;
    ServicesExcuteResult deleteTemplate(long templateId) throws ResourceNotFoundException;
    ServicesExcuteResult updateTemplateValid(long templateId) throws ResourceNotFoundException;
    ServicesExcuteResult<PageResponse<TemplatesTransfer>> queryTemplates(@Valid QueryTemplateRequest queryTemplateRequest);
    ServicesExcuteResult<PageResponse<TemplatesTransfer>> queryWaitForChallenge(@Valid PageRequest pageRequest,long userInformationId,boolean challenge);
}
